﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.IO;
using System.Drawing.Drawing2D;
using System.Text;
using FacebookApp;
using System.Xml;

public partial class Pages_RegisterAccount : System.Web.UI.Page
{

    int rrandom = 0;
    int grandom = 0;
    int brandom = 0;
    //static string groupduser_id;
    //int errorFBid_User = 0;//chưa check, 1 check - false, 2- check-true

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<User> checkuser = UserService.User_GetByTop("", " FB_Id = '" + Master.API.uid.ToString() + "'", "");
            if (checkuser.Count != 0)
            {
                lbUsernameExist.Text = checkuser[0].UserName.ToString();
                pnRegister.Visible = false;
                pnRegisterSuccessfull.Visible = false;
                pnExistAccount.Visible = true;

            }
            else
            {
                pnRegister.Visible = true;
                pnRegisterSuccessfull.Visible = false;
                //CreateCaptcha();
                RefreshCaptcha();

                StringReader data = new StringReader(Master.API.fql.query("SELECT name,email FROM user WHERE uid = " + Master.API.uid.ToString()));

                XmlTextReader reader = new XmlTextReader(data);
                XmlDocument doc = new XmlDocument();
                doc.Load(reader);
                XmlNode node;

                node = doc.GetElementsByTagName("name").Item(0);
                if (node.HasChildNodes)
                    txtFullName.Text = node.FirstChild.Value;
                node = doc.GetElementsByTagName("email").Item(0);
                if (node.HasChildNodes)
                    txtMail.Text = node.FirstChild.Value;
                //facebook.Schema.user u = Master.API.users.getInfo(Master.API.uid);

                txtFB_Id.Text = Master.API.uid.ToString();
                // txtFullName.Text = u.name;
                // txtAddress.Text = u.locale;
                txtPhone.Text = "";
                //txtMail.Text = "";// u.email_hashes.email_hashes_elt[0];

                //groupduser_id = "3";
            }
 
        }
    }

    protected bool CheckUserExist(string Username)
    {
        if (UserService.User_GetByTop("", " UserName = '" + Username + "'", "").Count == 0)
        {
            return false;
        }
        return true;

    }

    protected void btnRegister_Click(object sender, EventArgs e)
    {
        #region [TestInput]

        string error = "";


        if(txtUserName.Text=="")
            error += "- Chưa nhập tên đăng nhập.</br>";
        if(txtPassword1.Text == "")
            error += "- Chưa nhập mật khẩu.</br>";
        else
            if(txtPassword2.Text=="")
                error += "- Chưa nhập lại mật khẩu.</br>";
        
        if (txtFullName.Text == "")
        {
            error += "- Chưa nhập họ và tên.</br>";
        }

        if (txtAddress.Text == "")
        {
            error += "- Chưa nhập nhập địa chỉ.</br>";
        }

        if (txtPhone.Text == "")
        {
            error += "- Chưa nhập số điện thoại.</br>";
        }

        if (txtMail.Text == "")
        {
            error += "- Chưa nhập Email để xác nhận thông tin.</br>";
        }

        if (txtCaptcha.Text != Session["captcha"].ToString())
        {
            error += "- Nhập sai mã bảo vệ.</br>";
        }

        if (error != "")
        {
            lberror.Text = error;
            pnError.Visible = true;
            return;
        }
        else
            pnError.Visible = false;

        if (CheckUserExist(txtUserName.Text))
        {
            lbcheckexist.Text = "Tên tài khoản đã có người sử dụng.";
            lbcheckexist.Visible = true;
            //errorFBid_User = 1;
            return;
        }

        #endregion

        UserInfo user = new UserInfo();
        user.UserName = txtUserName.Text;
        user.Password = FunctionClass.encryptData(txtPassword1.Text);
        user.FB_Id = txtFB_Id.Text;
        user.FullName = txtFullName.Text;
        user.Address = txtAddress.Text;
        user.Phone = txtPhone.Text;
        user.Email = txtMail.Text;
        user.GroupUser_Id = "2";
        user.Status = "true";

        UserService.User_Insert(user);

        pnRegisterSuccessfull.Visible = true;
        pnRegister.Visible = false;

    }   

    protected string Format_Price(string s)
    {
        return FunctionClass.Format_Price(s);
    }
    protected void btrefresh_Click(object sender, EventArgs e)
    {
        pnRegister.DataBind();
        ControlClass.ResetControlValues(pnRegister);
    }

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        RefreshCaptcha();
    }

    private void RefreshCaptcha()
    {
        DirectoryInfo dr = new DirectoryInfo(Server.MapPath("~/Data/App/Captcha/"));
        foreach (FileInfo f in dr.GetFiles())
        {
            f.Delete();
        }
        captchaImage.ImageUrl = CreateCaptcha();
    }
    public string CreateCaptcha()
    {
        const byte LENGTH = 5;
        // chiều dài chuỗi để lấy các kí tự sẽ sử dụng cho captcha
        const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        using (Bitmap bmp = new Bitmap(120, 35))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                // Tạo nền cho ảnh dạng sóng
                HatchBrush brush = new HatchBrush(HatchStyle.Percent80, Color.White, Color.Tan);
                g.FillRegion(brush, g.Clip);
                // Lưu chuỗi captcha trong quá trình tạo
                StringBuilder strCaptcha = new StringBuilder();
                Random rand = new Random();
                float locationX = 3;
                for (int i = 0; i < LENGTH; i++)
                {
                    // Lấy kí tự ngẫu nhiên từ mảng chars
                    SolidBrush brushes = new SolidBrush(GetRandomColor());
                    string str = chars[rand.Next(chars.Length)].ToString();
                    strCaptcha.Append(str);
                    // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                    Font font = new Font("Times New Roman", new Random().Next(14, 17), FontStyle.Bold);
                    // Lấy kích thước của kí tự
                    SizeF size = g.MeasureString(str, font);
                    // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                    g.DrawString(str, font, brushes, locationX, rand.Next(2, 10));
                    font.Dispose();
                    //định location X
                    locationX += size.Width + i;
                }
                // Lưu captcha vào session
                Session["captcha"] = strCaptcha.ToString();
                // Ghi ảnh trực tiếp ra luồng xuất theo định dạng gif
                //Response.ContentType = "image/GIF";4
                int numRandom = new Random().Next(1, 3000);
                string imgFile = "captcha" + numRandom + ".jpg";
                string directoryCaptcha = "~/Data/App/Captcha/";
                // Kiểm tra thư mục đã tồn tại
                if (!Directory.Exists(Server.MapPath(directoryCaptcha)))
                {
                    Directory.CreateDirectory(Server.MapPath(directoryCaptcha));
                }
                //lấy thông tin thư mục
                DirectoryInfo direcInfo = new DirectoryInfo(Server.MapPath(directoryCaptcha));
                foreach (FileInfo file in direcInfo.GetFiles(".jpg"))
                {
                    try
                    {
                        //Xóa tất cả các tập tin hình trong thư mục hiện tại
                        file.Delete();
                    }
                    catch { }
                }
                bmp.Save(Server.MapPath(directoryCaptcha + imgFile));
                return directoryCaptcha + imgFile;
            }
        }
    }

    private Color GetRandomColor()
    {
        Random rnd = new Random();
        int ri = rnd.Next(255);
        if (ri == rrandom)
        {
            ri = rnd.Next(255);
        }
        else
        {
            rrandom = ri;
        }
        int gi = rnd.Next(255);
        if (gi == grandom)
        {
            gi = rnd.Next(255);
        }
        else
        {
            grandom = gi;
        }
        int bi = rnd.Next(255);
        if (bi == brandom)
        {
            bi = rnd.Next(255);
        }
        else
        {
            brandom = bi;
        }
        byte r = Convert.ToByte(ri);
        byte g = Convert.ToByte(gi);
        byte b = Convert.ToByte(bi);
        return Color.FromArgb(r, g, b);
    }
    protected void ibtcheckaccount_Click(object sender, ImageClickEventArgs e)
    {
        if (CheckUserExist(txtUserName.Text))
        {
            lbcheckexist.Text = "Tên tài khoản đã có người sử dụng.";
            lbcheckexist.Visible = true;
           // errorFBid_User = 1;
            //WebMsgBox.Show("Tên tài khoản đã có người sử dụng.");
        }
        else
        {
            lbcheckexist.Text = "Bạn có thể sử dụng tài khoản này.";
            lbcheckexist.Visible = true;
           // errorFBid_User = 2;
        }
    }
    protected void lbtforgotpass_Click(object sender, EventArgs e)
    {
        Response.Redirect("/Pages/ForgotPassword.aspx");
    }
}